<?php
//require_once '../debug.php';
/*
Что приходит в запросе:
<root phone="37282879541" type="ORIG">
   <imsi>37282879541</imsi>
   <iccid>37282879541</iccid>
   <duration>12</duration>
   <other>79299855639</other>
   <date>2013-04-29 10:36:54+00:00</date>
   <call_id>DBBAFC5F-943C-4C9C-BCF2-09872AE45857</call_id>
</root>

@phone - номер телефона
@type - тип записи:
        "ORIG" - исходящий вызов
        "TERM" - входящий вызов
        "SMS" - СМС сообщение
        "DATA" - Передача данных
        "FILLUP" - Пополнение
        "PIN" - ввод пин кода и пополнение им
imsi - IMSI (в данном случае сказалось то, что не для всех номеров мне известны корректные данные, на праздниках буду восстанавливать).
iccid - ICCID (в данном случае сказалось то, что не для всех номеров мне известны корректные данные, на праздниках буду восстанавливать).
duration - длительность вызова, там где это применимо
other - номер телефона, на который был произведён вызов (или с которого был произведён вызов, в зависимости от типа вызова)
date - дата совершения вызова
call_id - уникальный идентификатор вызова.
amount - размер пополнения (если применимо)
*/

// Не забыть отключить! 	
/*
$HTTP_RAW_POST_DATA = '<?xml version="1.0" encoding="UTF-8"?><root phone="37282705028" type="ORIG"><imsi>37282879541</imsi><iccid>37282879541</iccid><duration>12</duration><other>79299855639</other><date>2013-04-29 10:36:54+00:00</date><call_id>DBBAFC5F-943C-4C9C-BCF2-09872AE45857</call_id></root>';
$HTTP_RAW_POST_DATA = '<?xml version="1.0" encoding="UTF-8"?><root phone="37282879541"><imsi>37282879541</imsi><iccid>37282879541</iccid><date>2013-05-31 15:29:10.0</date><amount>0,23</amount><paysystem>Chronopay</paysystem><call_id>21545</call_id></root>';
$HTTP_RAW_POST_DATA = '<?xml version="1.0" encoding="UTF-8"?><root phone="37282866393" type="TERM"><imsi>37282866393</imsi><iccid>37282866393</iccid><duration>105</duration><other>79165005270</other><date>2013-06-06 09:08:08+00:00</date><call_id>3F125932-838E-4A3D-B3E5-5965BDD24761</call_id></root>';
$HTTP_RAW_POST_DATA = '<?xml version="1.0" encoding="UTF-8"?><root phone="37282866393" type="TERM"><imsi>37282866393</imsi><iccid>37282866393</iccid><duration>29</duration><other>37282874465</other><date>2013-06-06 17:18:18+00:00</date><call_id>876A13FC-B36E-4B59-8158-733B493E87D6</call_id></root>';
*/

$em = $em = require __DIR__ . '/../example/em.php';
//var_dump($em->getConfiguration()->setSQLLogger());
//$em->getConfiguration()->setSQLLogger(new \Doctrine\DBAL\Logging\EchoSQLLogger());
############## Пишем ошибки SQL в лог
//$em->getConfiguration()->setSQLLogger(new \Doctrine\DBAL\Logging\EchoSQLLogger());
//exit();


$request_xml = (isset($HTTP_RAW_POST_DATA)) ? $HTTP_RAW_POST_DATA : file_get_contents('php://input'); # access raw posted data
$xml = simplexml_load_string($request_xml); # load xml data into xml object

echo '<pre>';
print_r($xml);

if (isset($xml->attributes()->phone)) {
    $phone = $xml->attributes()->phone;
} else {
    $phone = NULL;
}
if (isset($xml->attributes()->type)) {
    $type = $xml->attributes()->type;
} else {
    if (isset($xml->paysystem)) {
        $type = 'FILLUP';
    } else {
        $type = NULL;
    }

}

if (isset($xml->imsi)) {
    $imsi = $xml->imsi;
} else {
    $imsi = NULL;
}

if (isset($xml->iccid)) {
    $iccid = $xml->iccid;
} else {
    $iccid = NULL;
}

if (isset($xml->duration)) {
    $duration = $xml->duration;
} else {
    $duration = NULL;
}

if (isset($xml->duration)) {
    $other = $xml->other;
    if ($other == 'anonymous') {
        $other = NULL;
    }
    if ($other == 'unavailable') {
        $other = NULL;
    }
} else {
    $other = NULL;
}

if (isset($xml->paysystem)) {
    $paysystem = $xml->paysystem;
} else {
    $paysystem = NULL;
}
$date = $xml->date;
$date = explode('+', $date);
//print_r($date[0]);
$date = $date[0];

$call_id = $xml->call_id;

if (isset($xml->amount)) {
    $amount = $xml->amount;
    //$amount=0.23;
    $amount = explode(',', $amount);
    //print_r($amount);
    $amount = implode('.', $amount);
} else {
    $amount = 0;
}
//$amount = strlen($xml->amount) == 0 ? 0 : (int)($xml->amount);
//print_r($amount);
//echo strlen($xml->amount);
//echo '</pre>';
//exit();
$cashed=0;
$date_cashed='';

$phone = $em->getRepository("Entity\Sim")->findOneByNumber($phone);

try
{
    if ($phone) {
        $sql = "insert into biling values(0, {$phone->getId()}, '$type', '$imsi', '$iccid', '$duration', '$other', '$date', '$call_id', '$amount', NOW(), '$paysystem', '$cashed', '$date_cashed')";
        $response = $em->getConnection()->exec($sql);
        $response = 'SUCCESS';

    }
}
catch(Exception $ex)
{
    $response = 'ERROR: '.$ex->getMessage()."\n";
    header('HTTP/1.1 404 Not Found');
}


//Пишем в лог
$results = date('d-m-Y [H:i:s]');
$results .= "\n";
$results .= "TYPE: " . $response;
$results .= "\n";
$results .= print_r($xml, true);
$results .= '=================================================';
$results .= "\n";
file_put_contents('../billing.log', $results, FILE_APPEND);
exit();


//подключаем БД
//include '../data/mysql.php';

// Ищем ID номера
//$result= mysql_query("SELECT sim.id FROM sim WHERE sim.number = ".$phone);
//while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
//    print_r($row);
//      $response='SUCCESS'; //Усли успех и такой номер есть в БД
//}


//Если номер существует то записывает данные из билинга в БД
//    INSERT INTO `biling` (`phone`, `type`, `imsi`, `iccid`, `duration`, `other`, `date`, `call_id`, `amount`, `date_record`) VALUES
//    ($phone,	$type,	$imsi,	$iccid,	$duration,	$other,	$date,	$call_id,	$amount, NOW());

//$response='ERROR'; //Усли неудача

//Пишем в лог
/*
$results = date('d-m-Y [H:i:s]');
$results .= "\n";
$results .= "TYPE: " . $response;
$results .= "\n";
$results .= print_r($xml, true);
$results .= '=================================================';
$results .= "\n";
file_put_contents('../billing.log', $results, FILE_APPEND);
*/
?>